<?php

use think\migration\Migrator;

class UserTable extends Migrator
{
    /**
     * 测试创建用户表
     *
     * @return void
     */
    public function change()
    {
        // 支付渠道表
        $this->table('payment_channels',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('channel_name', 'string', array('limit'=> 200, "null"=> false,'default'=>'','comment'=>'渠道名字'))
        ->addColumn('pay_code', 'string', array('limit'=> 200, "null"=> false,'default'=>'','comment'=>'支付代码(代码文件)'))
        ->addColumn('channel_status', 'boolean', array('default'=> false, "null"=> false,'comment'=> '状态(0 不可用  1 可用)'))
        ->addColumn('channel_debug', 'boolean', array('default'=> false, "null"=> false,'comment'=> '沙箱环境(0 否  1 是)'))
        ->addColumn('channel_code', 'string', array('limit'=> 20,'default'=>'','comment'=>'渠道代码'))
        ->addColumn('pay_url', 'string', array('limit'=> 255,'default'=>'','comment'=>'支付网关'))
        ->addColumn('find_url', 'string', array('limit'=> 255,'default'=>'','comment'=>'查询网关'))
        ->addColumn('channel_rate', 'float', array('limit'=> 11, 'default'=> 0, 'comment'=> '支付渠道费率'))
        ->addColumn('channel_rate_boolean', 'boolean', array('default'=> false, 'comment'=> '费率是否生效'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        ->create();

        // 支付方式表
        $this->table('payment_methods',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('method_name', 'string', array('limit'=> 200, "null"=> false,'default'=>'','comment'=>'名字'))
        ->addColumn('method_code', 'string', array('limit'=> 11, "null"=> false,'default'=>'','comment'=>'代码'))
        ->addColumn('is_show', 'boolean', array('default'=>false, 'comment'=>'是否展示'))
        ->create();

        // 创建商户表
        $this->table('shops',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('shop_name', 'string', array('limit'=> 200, "null"=> false,'default'=>'','comment'=>'商户名'))
        ->addColumn('shop_code', 'string', array('limit'=> 200, "null"=> false,'default'=>'','comment'=>'商户代码'))
        ->addColumn('company_main', 'string', array('limit'=> 100,'default'=>'','comment'=>'公司主体'))
        ->addColumn('shop_status', 'boolean', array('default'=> false,'comment'=> '状态(0 不可用  1 可用)'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        ->addColumn('update_time', 'datetime', array('comment'=> '更新时间'))
        ->create();

        // 商户支付方式表
        $this->table('shop_payment_methods',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('shop_id', 'integer', array('limit'=> 11, "null"=> false,'default'=>null,'comment'=>'商户id'))
        ->addColumn('method_id', 'integer', array('limit'=> 11, "null"=> false,'default'=>null,'comment'=>'方式id'))
        ->addColumn('status', 'boolean', array('default'=> false,'comment'=> '状态(0 不可用  1 可用)'))
        ->addColumn('pay_rate', 'float', array('limit'=> 11, 'default'=> 0, 'comment'=> '支付费率'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        // ->addForeignKey('shop_id', 'shops', 'id', ['delete'=> 'NO_ACTION']) // 添加商户表外键
        // ->addForeignKey('method_id', 'payment_methods', 'id', ['delete'=> 'NO_ACTION']) // 添加支付方式外键
        ->create();
        
        // 商户支付渠道表
        $this->table('shop_payments',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('shop_id', 'integer', array('limit'=> 11,'default'=>null,'comment'=>'商户id'))
        ->addColumn('channel_id', 'integer', array('limit'=> 11,'default'=>null,'comment'=>'渠道id'))
        ->addColumn('method_id', 'integer', array('limit'=> 11,'default'=>null,'comment'=>'方式id'))
        ->addColumn('status', 'boolean', array('default'=> false,'comment'=> '状态(0 不可用  1 可用)'))
        ->addColumn('appid', 'string', array('limit'=> 255,'default'=>'','comment'=>'收单机构appid'))
        ->addColumn('private_key', 'string', array('limit'=> 255,'default'=>'','comment'=>'收单机构密钥'))
        ->addColumn('public_key', 'string', array('limit'=> 255,'default'=>'','comment'=>'收单机构公钥'))
        ->addColumn('notify_url', 'string', array('limit'=> 255,'default'=>'','comment'=>'收单机构异步通知地址'))
        ->addColumn('return_url', 'string', array('limit'=> 255,'default'=>'','comment'=>'收单机构同步回调地址'))
        ->addColumn('settle_appid', 'string', array('limit'=> 255,'default'=>'','comment'=>'结算机构appid'))
        ->addColumn('settle_secret', 'string', array('limit'=> 255,'default'=>'','comment'=>'结算机构secret'))
        ->addColumn('settle_get_userInfo', 'boolean', array('default'=>false,'comment'=>'结算机构获取用户信息(0 否  1 是)'))
        ->addColumn('polling', 'boolean', array('default'=> false,'comment'=> '是否轮询(0 否  1 是)'))
        ->addColumn('polling_code', 'string', array('limit'=> 255,'default'=>'','comment'=>'轮询代码'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        // ->addForeignKey('shop_id', 'shops', 'id', ['delete'=> 'NO_ACTION']) // 添加商户表外键
        // ->addForeignKey('channel_id', 'payment_channels', 'id', ['delete'=> 'NO_ACTION']) // 添加通道表外键
        // ->addForeignKey('method_id', 'payment_methods', 'id', ['delete'=> 'NO_ACTION']) // 添加支付方式外键
        ->create();

        // 创建商户用户表
        $this->table('users',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('shop_id', 'integer', array('limit'=>  11,'default'=> null,'comment'=>'商户id'))
        ->addColumn('user_id', 'string', array('limit'=>  50,'default'=> '','comment'=>'身份标识'))
        ->addColumn('card_name', 'string', array('limit'=>  15,'default'=>'','comment'=>'证件名'))
        ->addColumn('card_no', 'string', array('limit'=>  100,'default'=>'','comment'=>'证件号'))
        ->addColumn('phone', 'string', array('limit'=>  20,'default'=>'','comment'=>'手机号'))
        ->addColumn('status', 'boolean', array('default'=> false,'comment'=> '状态(0 不可用  1 可用)'))
        ->addColumn('open_status', 'boolean', array('default'=> false,'comment'=> '开户状态(0 未开户  1 已开户)'))
        ->addColumn('open_time', 'datetime', array('comment'=> '开户时间'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        ->addColumn('update_time', 'datetime', array('comment'=> '更新时间'))
        ->addIndex(array('card_no'), array('unique'  =>  true)) // 添加索引
        //  'SET_NULL'、 设置为空
        //  'NO_ACTION'、 如果子表中有匹配的记录, 则不允许对父表对应候选键进行update/delete操作  
        //  'CASCADE'  同步操作
        //  'RESTRICT'  同NO_ACTION, 都是立即检查外键约束
        // ->addForeignKey('shop_id', 'shops', 'id', ['delete'=> 'NO_ACTION']) // 添加外键
        ->create();

        // 订单记录表
        $this->table('charge_record',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('payment_id', 'integer', array('limit'=> 11, 'default'=>null,'comment'=>'商户通道id'))
        ->addColumn('user_id', 'integer', array('limit'=> 11, 'default'=>null,'comment'=>'用户id'))
        ->addColumn('amount', 'float', array('limit'=> 11, 'default'=>0,'comment'=>'金额'))
        ->addColumn('pay_amount', 'float', array('limit'=> 11, 'default'=>0,'comment'=>'支付金额'))
        ->addColumn('success_amount', 'float', array('limit'=> 11, 'default'=>0,'comment'=>'收单机构金额'))
        ->addColumn('shop_order', 'string', array('limit'=> 100,'default'=>'','comment'=>'商户订单号'))
        ->addColumn('platform_order', 'string', array('limit'=> 100,'default'=>'','comment'=>'平台订单号'))
        ->addColumn('acquirer_order', 'string', array('limit'=> 100,'default'=>'','comment'=>'收单机构订单号'))
        ->addColumn('describe', 'string', array('limit'=> 255,'default'=>'','comment'=>'订单描述'))
        ->addColumn('ip', 'string', array('limit'=> 100,'default'=>'','comment'=>'请求ip'))
        ->addColumn('client_type', 'integer', array('limit'=> 1, 'default'=>0,'comment'=>'设备类型( 0-pc 1-h5  2-公众号  3-app )'))
        ->addColumn('order_status', 'integer', array('default'=> 0, 'default'=> 0,'comment'=> '支付状态(0-未完成  1-已付款  2-已完成  3-已关闭 4-已退款)'))
        ->addColumn('pay_status', 'boolean', array('default'=> false,'comment'=> '支付状态(0 未支付  1 已支付)'))
        ->addColumn('notice_status', 'boolean', array('default'=> false,'comment'=> '通知状态(0 已通知  1 未通知)'))
        ->addColumn('notice_number', 'integer', array('limit'=> 1, 'default'=> 0,'comment'=> '通知次数'))
        ->addColumn('card_no', 'string', array('limit'=> 100,'default'=>'','comment'=>'卡号'))
        ->addColumn('card_key', 'string', array('limit'=> 100,'default'=>'','comment'=>'卡密'))
        ->addColumn('extend', 'string', array('limit'=> 255,'default'=>'','comment'=>'扩展参数1'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        ->addColumn('update_time', 'datetime', array('comment'=> '更新时间'))
        // ->addForeignKey('payment_id', 'shop_payments', 'id', ['delete'=> 'NO_ACTION']) // 添加商户通道外键
        // ->addForeignKey('user_id', 'users', 'id', ['delete'=> 'NO_ACTION']) // 添加用户表外键
        ->create();


        // 请求记录表
        $this->table('request_records',  ['id' => true, 'engine' => 'InnoDB'])
        ->addColumn('type', 'integer', array('limit'=>1, 'default'=>0, 'comment'=>'请求类型( 0-商户请求 1-平台回调 2-三方请求)'))
        ->addColumn('shop_order', 'string', array('limit'=> 100,'default'=>'','comment'=>'商户订单号'))
        ->addColumn('request', 'text', array('comment'=>'请求数据'))
        ->addColumn('response', 'text', array('comment'=>'响应数据'))
        ->addColumn('create_time', 'datetime', array('comment'=> '创建时间'))
        ->addColumn('update_time', 'datetime', array('comment'=> '更新时间'))
        ->create();


        // 修改列数据
        // $this->table('user')->changeColumn('last_login_time', 'string', array('limit'  =>  15,'default'=>''))->update();

        // 删除表
        // $this->table('user')->drop()->update();
    }
}
